#define sync(b) ( (n_fps % b) == b - 1 )

import "mod_key";
import "mod_map";
import "mod_video";
import "mod_text";
import "mod_scroll";
import "Mod_proc";
import "mod_sound";
import "Mod_screen";
import "Mod_draw";
import "Mod_grproc";
import "Mod_rand";
import "mod_file";
import "mod_math";
import "mod_say";
import "mod_debug";
import "mod_string";
import "mod_timers";
Global
n_fps;
h_suelo = 400;
process main()
begin
set_mode(640,480,8);
set_fps(60,0);

drawing_map(0,0);
drawing_color(100);
draw_line(0,h_suelo,640,h_suelo);

drawing_color(200);
draw_line(50,h_suelo,150,h_suelo);
drawing_color(300);
draw_line(170,h_suelo,270,h_suelo);

//actor();
actor_float();
loop
	if (key(_f))
		set_fps(1,0);
	end;
	if (key(_p))
		set_fps(60,0);
	end;
	
	if (n_fps < 59)
		n_fps = n_fps+1;
	else
		n_fps = 0;
	end;
	frame;
end;
end;

process actor()
private
//general
resolucion = 4;
xx;
yy ;

//movimiento x
v_x;
accel_x = 1;
v_punta = 5;
v_friccion=5;

//movimiento y
v_y;
v_salto = 16;
g = 4;

begin
graph = map_new(10,10,8);
drawing_map(0,graph);
drawing_color(200);
draw_box(0,0,10,10);
xx=160;
y=100;

loop
	
	//control movimiento
	
	if (key(_right) && v_x < v_punta)
		if (sync(v_friccion-v_x)) v_x+=accel_x; end;
	end;
	
	if (key(_left) && v_x > -v_punta)
		if (sync(v_friccion-v_x)) v_x-=accel_x; end;
	end;
	
	if (v_x!=0 && !key(_left) && !key(_right))
		if (sync(v_friccion)) v_x-=(v_x/abs(v_x))*accel_x; end;
	end;
	
	if (key(_space) && y==h_suelo)
		v_y = -v_salto;
	end;
	
	//actualizamos posiciones
	xx += v_x;
	x = xx/resolucion;
	
	yy += v_y;
	y = yy/resolucion;
	
	//gravedad vertical
	if (y >= h_suelo) 
		v_y = 0;
		y = h_suelo;
	else
		if (sync(resolucion))v_y += g;end;
	end;
	
	frame;
end;
end;

process actor_float()
private
//general
resolucion = 4;
xx;
yy ;

//movimiento x
float v_x;
float accel_x = 0.3;
float v_punta = 6.0;
float v_friccion = 0.1;
float angulo = 90;
float slp = 0.05;

//movimiento y
float v_y;
float v_salto = 16.0;
float g = 4.0;

begin
graph = map_new(10,10,8);
drawing_map(0,graph);
drawing_color(300);
draw_box(0,0,10,10);
x=160;
y=100;

loop
	
	if (x>50 and x<150)
		angulo = 30;
	elseif (x >170 and x <270)
		angulo = 150;
	else
		angulo = 90;
	end;
	
	if (v_x!=0) v_x += slp*(sin(angulo-90)*1000); end;
	
	//control movimiento
	if (key(_right) && v_x < v_punta)
		if (v_x<accel_x)
			v_x+=v_friccion;
		else
			v_x+=accel_x;
		end;
	end;
	
	if (key(_left) && v_x > -v_punta)
		if (v_x<-accel_x)
			v_x-=v_friccion;
		else
			v_x-=accel_x;
		end;
		
	end;
		
	if (v_x!=0.0 && !key(_left) && !key(_right))
		if (abs(v_x)<v_friccion)
			v_x = v_x - abs(v_x) * (v_x/abs(v_x));
		else
			v_x = v_x - v_friccion * (v_x/abs(v_x));
		end;
		
	end;

	if (key(_space) && y==h_suelo)
		v_y = -v_salto;
	end;
	
	//actualizamos posiciones
	xx += v_x;
	x = xx/resolucion;
	
	yy += v_y;
	y = yy/resolucion;
	
	//gravedad vertical
	if (y >= h_suelo) 
		v_y = 0;
		y = h_suelo;
	else
		v_y +=g;
	end;
	
	frame;
end;
end;

